package algorithm.difficult;

import java.util.Arrays;

/**
 * 给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个，并把它加到字符串的末尾。
 *
 * 返回 在应用上述步骤的任意数量的移动后，字典上最小的字符串 。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：s = "cba", k = 1
 * 输出："acb"
 * 解释：
 * 在第一步中，我们将第一个字符（“c”）移动到最后，获得字符串 “bac”。
 * 在第二步中，我们将第一个字符（“b”）移动到最后，获得最终结果 “acb”。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/orderly-queue
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class OrderlyQueue899 {
    //https://leetcode.cn/problems/orderly-queue/solution/by-huang-bin-bin-7-26r5/
    //k=1,将s看作循环，找到一个最小的顺序
    //k>1 必能进行排序
    public String orderlyQueue(String s, int k) {
        if (k == 1) {
            String lessStr = s;
            StringBuilder stringBuilder = new StringBuilder(s);
            for (int i = 0; i < s.length(); i++) {
                stringBuilder.deleteCharAt(0);
                stringBuilder.append(s.charAt(i));
                if (lessStr.compareTo(stringBuilder.toString())>0){
                    lessStr = stringBuilder.toString();
                }
            }
            return lessStr;
        }else {
            //不等于1的情况
            char[] chars = s.toCharArray();
            Arrays.sort(chars);
            return new String(chars);
        }
    }
}
